import urllib.parse

"""
urllib 库里还提供了 parse 模块，它定义了处理 URL 的标准接口，例如实现 URL 各部分的抽取、合并以及链接转换
"""

# 示例1 实现 URL 的识别和分段
"""
 urlparse 方法将其拆分成了 6 个部分。大体观察可以发现，解析时有特定的分隔符。比如，:// 前面的就是 scheme，代表协议；第一个 / 符号前面便是 netloc，即域名，后面是 path，即访问路径；分号 ; 后面是 params，代表参数；问号 ? 后面是查询条件 query，一般用作 GET 类型的 URL；井号 # 后面是锚点，用于直接定位页面内部的下拉位置。
"""
result = urllib.parse.urlparse('https://www.baidu.com/index.html;user?id=5#comment')
print(type(result))
print(
    result)  # ParseResult(scheme='https', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

# 示例2 忽略 fragment(锚点)
"""
allow_fragments：即是否忽略 fragment。如果它被设置为 False，fragment 部分就会被忽略，它会被解析为 path、parameters 或者 query 的一部分，而 fragment 部分为空。
"""
result = urllib.parse.urlparse('https://www.baidu.com/index.html;user?id=5#comment', allow_fragments=False)
print(type(result))
print(result)# ParseResult(scheme='https', netloc='www.baidu.com', path='/index.html', params='user', query='id=5#comment', fragment='')

# 示例3 当 URL 中不包含 params 和 query 时，fragment 便会被解析为 path 的一部分。
result = urllib.parse.urlparse('https://www.baidu.com/index.html#comment', allow_fragments=False)
print(result) # ParseResult(scheme='https', netloc='www.baidu.com', path='/index.html#comment', params='', query='', fragment='')

# 示例4 获取分析url 的每一部分
"""
返回结果 ParseResult 实际上是一个元组，我们既可以用索引顺序来获取，也可以用属性名获取
可以发现，二者的结果是一致的，两种方法都可以成功获取
"""
result = urllib.parse.urlparse('https://www.baidu.com/index.html#comment', allow_fragments=False)
print(result.scheme, result[0], result.netloc, result[1], sep='\n')# https、https、www.baidu.com、www.baidu.com